/**
 * 四海兄弟工作小组，群号:160517807
 * @author 乔继承
 * @date 2014年1月18日 下午12:55:26 
 * @version V1.0   
 */
package org.mcpro.common.dao;

import java.util.List;

import org.mcpro.core.dao.IBaseDAO;
import org.mcpro.core.model.DictObject;
import org.mcpro.core.model.DictObject2field;

/**
 * 系统数据库表的字段对象，用以完成表的创建、字段修改、并记录系统表的相信息
 * 
 * @author 乔继承
 * @date 2014年1月18日 下午12:55:26
 * 
 */
public interface IDictObjectDAO extends IBaseDAO {

	/**
	 * 根据当前对象的相关信息创建数据库，创建成功返回0，失败返回-1
	 * 
	 * @author 乔继承
	 * @param dictObject
	 * @date 2014年3月3日 下午10:13:36
	 */
	int createTable(DictObject dictObject);
	

	/** 
	 * 根据DictObject中相关的信息保存dictObject的对象信息和字段信息
	 * 
	 * @param dictObject
	 * @author 乔继承
	 * @date 2014年3月4日 下午10:17:42
	*/ 
	void saveDictObject(DictObject dictObject);

	/**
	 * 根据所有的DictObject对象信息，此信息不包含字段属性的信息描述，如果参数存在则获取参数指定的对象信息，不存在则获取所有信息
	 * @param ids 可选参数，对象的id
	 * @return
	 * @author 乔继承
	 * @date 2014年3月16日 上午12:24:10
	 */
	List<DictObject> getDictObjectList(String... ids);

	/** 
	 * 获取数据库中某些对象的所有字段信息信息描述,如果idObject存在则获取指定的某些对象的所有属性，否则获取全部对象的属性
	 * @param idObject
	 * @return
	 * @author 乔继承
	 * @date 2014年3月5日 下午8:50:46
	*/ 
	List<DictObject2field> getDictObject2FieldList(String... idObject);

	/** 根据对象的id获取当前对象，后期可能修改为泛型实现
	 * @param id
	 * @return
	 * @author 乔继承
	 * @date 2014年3月9日 下午4:14:03
	*/ 
	DictObject2field getDictObject2FieldById(String id);

	/**
	 * 根据字段属性的信息保存或更新相关对象中的属性信息，返回关联对象的属性列表
	 * @param dictObject2field
	 * @return
	 * @author 乔继承
	 * @date 2014年3月16日 上午10:58:01
	 */
	List<DictObject2field> saveOrupdateObjectField(DictObject2field dictObject2field);

	/** 
	 * 根据当前字段的属性为目标表添加字段
	 * @param tableName
	 * @param dictObject2field
	 * @author 乔继承
	 * @date 2014年3月15日 下午11:55:06
	*/ 
	int addColumnByField(String tableName, DictObject2field dictObject2field);

	/** 根据当前字段的属性修改目标表的字段
	 * @param tableName
	 * @param dictObject2field
	 * @author 乔继承
	 * @date 2014年3月15日 下午11:55:21
	*/ 
	int alterColumnByField(String tableName, DictObject2field dictObject2field);

	/**
	 * 
	 * @param propertyName
	 * @param value
	 * @return
	 * @author 乔继承
	 * @date 2014年3月16日 上午1:46:12
	 */
	List<DictObject> getObjectByProperty(String[] propertyName, Object[] value);

}
